package cn.woflcode.game.model;

import cn.woflcode.game.Global.Global;
import cn.woflcode.game.Global.ImageUtil;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.util.ArrayList;
import java.util.List;

/**
 * 英雄战机:封装英雄战机的状态和功能
 */
public class HeroPlane {
    //--------------------------状态----------------------------------------
    //位置:x坐标
    private int x;
    //位置:y坐标
    private int y;
    //大小:宽
    private int width;
    //大小:高
    private int height;
    //飞机的图片
    private BufferedImage image = ImageUtil.getImage("hero0");
    private BufferedImage image2 = ImageUtil.getImage("19147e58c2e7bc086b91928481ab61d");
    private  BufferedImage aa =ImageUtil.getImage("hero");
    private  BufferedImage ab =ImageUtil.getImage("score");
    //生命数 ,设置默认值为 2,相当于是两条命
    private int life =10;

    //总的奖励得分,设置默认值为0
    public static int totalScore = 0;
    //状态
    private Global.FlyObjectState state = Global.FlyObjectState.ALIVE;
    //--------------------------初始化---------------------------------------
    //使用构造器,做初始化操作
    public HeroPlane(){
        this.width = image.getWidth();  //获取图片的宽度
        this.height = image.getHeight();//获取图片的高度
        //为了让英雄战机出现在 游戏界面的 中间偏下 的位置
        this.x = (Global.GAME_UI_WIDTH - width) / 2;
        this.y = Global.GAME_UI_HEIGHT*3/5;
    }
    //--------------------------功能----------------------------------------
    //绘制自己
    public void drawSelf(Graphics g){
        //思考:为什么不直接使用 Global 里面获取的图片的宽和高

        if(totalScore >= 30){
            g.drawImage(image2,x,y,width,height,null);
        }else {
            g.drawImage(image, x, y, width, height, null);
        }

        g.drawImage(aa,10,20,null);
        g.drawImage(ab,10,80,null);
        //设置画笔的演示和字体的类型
        g.setColor(Color.PINK);
        //三个参数分别是: 字的类型,加粗,大小
        g.setFont(new Font(Font.MONOSPACED,Font.BOLD,45));
        g.drawString("×"+totalScore,70,115);
        //画出生命数和得分
        if(life<=2){
            g.setColor(Color.RED);
        }
        g.drawString("×"+life,70,63);

    }

    //移动 / 飞行
    //括号中的参数 x 和 此时代表的是传过来的 鼠标的坐标 x和y
    public void move(int x,int y){
        this.x = x - width/2; //把传过来的括号中的参数鼠标的x坐标: x 赋值给成员变量:飞机的x坐标 this.x
        this.y = y - height/2;
    }
    //开火: 发射子弹
    //因为是同时发射很多子弹,所以我们使用list集合来存储
    public List<HeroBullet> fire(){
        List<HeroBullet> list= new ArrayList<>();
        //创建子弹对象,存储到集合中
        //关于 子弹的坐标,此处有坑
        list.add(new HeroBullet(x+width/2,y));
        return list;
    }

    //判断是否还活着 ,此时用boolean 类型来修饰,只能接收true / false
    public boolean isAlive(){
        return this.life > 0;
    }
    //被攻击: 生命数 -value
    public void attacked(int value){

        if (this.life>0){
            this.life -= value; //注意,这里的 -= 其实就是 this.life = this.life - value
        }
    }
    public void addlife(int li){
        this.life +=li;
}
    //增加奖励得分 : 击毁敌机
    public void addScore(int score){
        this.totalScore += score;
    }
    //获取英雄战机外围的圆形的圆心（x,y）和半径
    //圆 x坐标
    public int getCenterX(){
        return x+width/2;
    }
    //圆y坐标
    public int getCenterY(){
        return y+height/2;
    }
    //圆半径
    public int getR(){
        return Math.min(width,height)/2;
    }

    public int getTotalScore() {
        return totalScore;
    }

    public int getLife() {
        return life;
    }

    public void setLife(int life) {
        this.life = life;
    }
}